home *** CD-ROM | disk | FTP | other *** search
/ PC Graphics Unleashed / PC Graphics Unleashed.iso / ch18 / rtrace / mol2scn.awk < prev    next >
Text File  |  1993-07-05  |  2KB  |  62 lines

  1. BEGIN    {
  2.   FS = " "
  3.   getline
  4.   getline
  5. }
  6. /atoms/    {
  7.   print "% Converted to SCN"
  8.   print "% Copyright 1992 Antonio Costa (acc@asterix.inescn.pt)"
  9.   printf "\n#include \"mol.h\"\n\n"
  10.   print "% Atoms:", $1, "- Bonds:", $3
  11.   atoms = $1
  12.   t++
  13.   maxx = -10000
  14.   maxy = -10000
  15.   maxz = -10000
  16.   minx = -maxx
  17.   miny = -maxy
  18.   minz = -maxz
  19.   next
  20.   }
  21. /^[^0-9]/ {
  22.   c[$1] = $4
  23.   if ($6 == 0) r[$1] = 0.1
  24.   if ($6 != 0) r[$1] = $6
  25.   next
  26. }
  27. /^[0-9]+[ \t]+[^0-9]/ {
  28.   printf "sphere surface matte %s data %g %g %g %g\n", \
  29.   c[$2], $3, $4, $5, r[$2]
  30.   if ($3 > maxx) maxx = $3
  31.   if ($4 > maxy) maxy = $4
  32.   if ($5 > maxz) maxz = $5
  33.   if ($3 < minx) minx = $3
  34.   if ($4 < miny) miny = $4
  35.   if ($5 < minz) minz = $5
  36.   atoms--
  37.   if (atoms == 0) exit
  38.   next
  39. }
  40. END    {
  41.   if (maxx < maxy && maxx < maxz) {
  42.     printf "\neye %g %g %g\n", \
  43.     maxx + 3 * (maxx - minx), maxy, maxz
  44.     printf "light point %g %g %g white\n", \
  45.     maxx + 2 * (maxx - minx), maxy, maxz
  46.   }
  47.   if (maxy < maxx && maxy < maxz) {
  48.     printf "\neye %g %g %g\n", \
  49.     maxx, maxy + 3 * (maxy - miny), maxz
  50.     printf "light point %g %g %g white\n", \
  51.     maxx, maxy + 2 * (maxy - miny), maxz
  52.   }
  53.   if (maxz < maxx && maxz < maxy) {
  54.     printf "\neye %g %g %g\n", \
  55.     maxx, maxy, maxz + 3 * (maxz - minz)
  56.     printf "light point %g %g %g white\n", \
  57.     maxx, maxy, maxz + 2 * (maxz - minz)
  58.   }
  59.   printf "at %g %g %g\n", \
  60.   (maxx + minx) / 2.0, (maxy + miny) / 2.0, (maxz + minz) / 2.0
  61. }
  62.